package com.zjbspringboot;

/**
 * @Description:
 * @Author: 张锦波
 * @Date: 2024/8/5 15:14
 * @Version: 1.0
 */

import com.zjbspringboot.config.ZjbConfig;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * Initializer :初始化器
 * 1.创建我们的spring容器
 * 2.加载/关联Spring容器的配置-按照注解的方式
 * 3.完成spring容器配置的bean的创建，依赖注入
 * 4.创建前端控制器DispatherServlet并让他持有容器
 * 5.当DispatherServlet持有容器，就可以进行分发映射【可回忆SpringMvc的底层实现】
 * 6.这里的onStartup是tomcat调用的，并把ServletContext对象传入
 */
public class ZjbWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("startup.....");
        //1.加载Spring web application configuration--->容器
        AnnotationConfigWebApplicationContext ac =
                new AnnotationConfigWebApplicationContext();
        //ac中注册ZjbConfig配置类
        ac.register(ZjbConfig.class);
        ac.refresh();//2.完成bean的创建和配置
        //3.创建非常重要的前端控制器，并使它持有该容器
        //这样就可以进行映射分发
        DispatcherServlet dispatcherServlet =
                new DispatcherServlet(ac);
        //4.把我们这个前端控制器加入到servletContext中
        ServletRegistration.Dynamic registration =
                servletContext.addServlet("app", dispatcherServlet);
        //当tomcat1启动时会加载dispatcherServlet
        registration.setLoadOnStartup(1);
        //拦截请求进行分发处理
        registration.addMapping("/");
    }
}
